package br.com.bacabeleireiros.sysbeleza.controller;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;

import br.com.bacabeleireiros.sysbeleza.entity.Cliente;
import br.com.bacabeleireiros.sysbeleza.entity.Produto;
import br.com.bacabeleireiros.sysbeleza.entity.VendaProduto;
import br.com.bacabeleireiros.sysbeleza.service.IClienteService;
import br.com.bacabeleireiros.sysbeleza.service.IProdutoService;
import br.com.bacabeleireiros.sysbeleza.service.IVendaProdutoService;
import br.com.bacabeleireiros.util.controller.BaseBean;

@ManagedBean(name = "vendaMB")
@ViewScoped
public class VendaMB extends BaseBean implements Serializable {

	private static final long serialVersionUID = 1L;
	private VendaProduto vendaProduto;
	private Cliente clienteSelecionado;
	private Produto produtoSelecionado;
	private Double totalProduto;
	
	@ManagedProperty("#{clienteService}")
	private IClienteService clienteService;		
	
	@ManagedProperty("#{produtoService}")
	private IProdutoService produtoService;		
	
	@ManagedProperty("#{vendaProdutoService}")
	private IVendaProdutoService vendaProdutoService;			
	
	
	public VendaMB() {
		inicializa();
	}
	
	public void inicializa() {
		vendaProduto = new VendaProduto();
		clienteSelecionado = new Cliente();
		produtoSelecionado = new Produto();
		totalProduto = new Double(0);
	}
	
	public double getValorTotalVenda(Long idCliente) {
		double total = 0;
		for (VendaProduto v : getListaVendaProduto()) {
			if (v.getCliente().getIdCliente()==idCliente) {
				total += v.getValor() * v.getQuantidade();
			}
		}
		return total;
	}	
	
	public List<VendaProduto> getListaVendaProduto() {
		return vendaProdutoService.getListaVendaProduto();
	}	
	
	public List<Cliente> getListaClienteSelecionados() {
		String clienteSelelcionado = getClienteSelecionado().getNome();
		if (clienteSelelcionado == null) {
			clienteSelelcionado = "";
		}
		return clienteService.getListaClienteSelecionados(clienteSelelcionado);
	}	
	
	public List<Produto> getListaProdutoSelecionado() {
		String produtoSelelcionado = getProdutoSelecionado().getDescProduto();
		if (produtoSelelcionado == null) {
			produtoSelelcionado = "";
		}
		return produtoService.getListaProdutoSelecionado(produtoSelelcionado);
	}	
	
	public void totalizaProduto() {
		setTotalProduto(getVendaProduto().getValor() * getVendaProduto().getQuantidade()); 
	}
	
	public void salvaVenda() {
		try {
			vendaProduto.setDataVenda(new Date()); 
			vendaProduto.setCliente(getClienteSelecionado());
			vendaProduto.setProduto(getProdutoSelecionado()); 
			vendaProduto = vendaProdutoService.salva(vendaProduto);
			inicializa();
			addInfoMessage("Venda Finalizada com Sucesso"); 
		} catch (Exception e) {
			e.printStackTrace();	
			addErrorMessage("Erro ao Efetuar Venda.");
		}		
	}
	

	// gets e sets

	public VendaProduto getVendaProduto() {
		return vendaProduto;
	}

	public void setVendaProduto(VendaProduto vendaProduto) {
		this.vendaProduto = vendaProduto;
	}

	public Cliente getClienteSelecionado() {
		return clienteSelecionado;
	}

	public void setClienteSelecionado(Cliente clienteSelecionado) {
		this.clienteSelecionado = clienteSelecionado;
	}

	public Produto getProdutoSelecionado() {
		return produtoSelecionado;
	}

	public void setProdutoSelecionado(Produto produtoSelecionado) {
		this.produtoSelecionado = produtoSelecionado;
		if (produtoSelecionado != null) {
			getVendaProduto().setQuantidade(1);
			getVendaProduto().setValor(produtoSelecionado.getValorVenda()); 
		}
	}

	public void setClienteService(IClienteService clienteService) {
		this.clienteService = clienteService;
	}

	public void setProdutoService(IProdutoService produtoService) {
		this.produtoService = produtoService;
	}

	public Double getTotalProduto() {
		return totalProduto;
	}

	public void setTotalProduto(Double totalProduto) {
		this.totalProduto = totalProduto;
	}

	public void setVendaProdutoService(IVendaProdutoService vendaProdutoService) {
		this.vendaProdutoService = vendaProdutoService;
	}

}
